﻿
#region Comment

/*
 * Project：    SpaceLibrary
 * 
 * FileName:    Option/legend.cs
 * CreatedOn:   2016-06-23
 * CreatedBy:   农夫有田
 * 
 * 
 * Description：
 *      ->      ECharts3全局参数
 *   
 * History：
 *      ->
 * 
 * Examples：
 *      ->      
 *          
 */

#endregion

namespace SpaceLibrary
{
    using System;
    using System.Collections.Generic;

    #region 全局参数

    /// <summary>
    /// 全局参数
    /// </summary>
    public partial class ECharts3
    {
        #region legend

        /// <summary>
        /// 图例组件。
        /// <para>图例组件展现了不同系列的标记(symbol)，颜色和名字。可以通过点击图例控制哪些系列不显示。</para>
        /// <para>ECharts 3 中单个 echarts 实例中可以存在多个图例组件，会方便多个图例的布局。</para>
        /// </summary>
        public _legend legend = new _legend();

        public class _legend
        {
            #region show

            private bool _show = true;

            /// <summary>
            /// 是否显示图例组件
            /// <para>[ default: true ]</para>
            /// </summary>
            public bool show
            {
                get { return _show; }
                set { _show = value; }
            }

            #endregion

            #region data

            private List<string> _data = new List<string> { };

            /// <summary>
            /// 图例的数据数组。数组项通常为一个字符串，每一项代表一个系列的 name（如果是饼图，也可以是饼图单个数据的 name）。图例组件会自动获取对应系列的颜色，图形标记（symbol）作为自己绘制的颜色和标记，特殊字符串 ''（空字符串）或者 '\n' (换行字符串)用于图例的换行。
            /// <para>如果要设置单独一项的样式，也可以把该项写成配置项对象。此时必须使用 name 属性对应表示系列的 name。</para>
            /// <para>也可设置 datalist 数据结构，详细设置图标，文本样式</para>
            /// </summary>
            public List<string> data
            {
                get { return _data; }
                set { _data = value; }
            }

            private List<dataList> _datalist = new List<dataList>() { };

            /// <summary>
            /// 图例的数据数组。数组项通常为一个字符串，每一项代表一个系列的 name（如果是饼图，也可以是饼图单个数据的 name）。图例组件会自动获取对应系列的颜色，图形标记（symbol）作为自己绘制的颜色和标记，特殊字符串 ''（空字符串）或者 '\n' (换行字符串)用于图例的换行。
            /// <para>如果要设置单独一项的样式，也可以把该项写成配置项对象。此时必须使用 name 属性对应表示系列的 name。</para>
            /// <para>也可设置 data 数据结构，简单设置数据数组文本</para>
            /// </summary>
            public List<dataList> datalist
            {
                get { return _datalist; }
                set { _datalist = value; }
            }

            #region dataList

            /// <summary>
            /// dataList
            /// </summary>
            public class dataList
            {
                #region name

                private string _name = string.Empty;

                /// <summary>
                /// 图例项的名称，对应系列的 name（如果是饼图，也可以是饼图单个数据的 name）。
                /// </summary>
                public string name
                {
                    get { return _name; }
                    set { _name = value; }
                }

                #endregion

                #region icon

                private dynamic _icon = string.Empty;

                /// <summary>
                /// 图例项的 icon。
                /// <para>可选自带的标记类型， 有 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'</para>
                /// <para>也可以通过 'image://url' 设置为图片，其中 url 为图片的链接。</para>
                /// </summary>
                public dynamic icon
                {
                    get { return _icon; }
                    set
                    {
                        Type type = value.GetType();
                        if (type.IsEnum)
                        {
                            switch ((Enum.legend.data.icon)value)
                            {
                                case Enum.legend.data.icon.circle:
                                    _icon = Params.icon.circle;
                                    break;
                                case Enum.legend.data.icon.rect:
                                    _icon = Params.icon.rect;
                                    break;
                                case Enum.legend.data.icon.roundRect:
                                    _icon = Params.icon.roundRect;
                                    break;
                                case Enum.legend.data.icon.triangle:
                                    _icon = Params.icon.triangle;
                                    break;
                                case Enum.legend.data.icon.diamond:
                                    _icon = Params.icon.diamond;
                                    break;
                                case Enum.legend.data.icon.pin:
                                    _icon = Params.icon.pin;
                                    break;
                                case Enum.legend.data.icon.arrow:
                                    _icon = Params.icon.arrow;
                                    break;
                                default:
                                    _icon = Params.icon.circle;
                                    break;
                            }
                        }
                        else
                            _icon = value;
                    }
                }

                #endregion

                #region textStyle

                /// <summary>
                /// 图例的公用文本样式。
                /// </summary>
                public _textStyle textStyle = new _textStyle();

                public class _textStyle
                {
                    #region color

                    private string _color = string.Empty;

                    /// <summary>
                    /// 文字的颜色
                    /// <para>[ default: '#ccc' ]</para>
                    /// </summary>
                    public string color
                    {
                        get { return _color; }
                        set { _color = value; }
                    }

                    #endregion

                }

                #endregion

            }

            #endregion

            #endregion

            #region  left

            private dynamic _left = Params.align.auto;

            /// <summary>
            /// 图例组件离容器左侧的距离。
            /// <para>[ default: 'auto' ]</para>
            /// <para>left 的值可以是像 20 这样的具体像素值，可以是像 '20%' 这样相对于容器高宽的百分比，也可以是 'left', 'center', 'right'。</para>
            /// <para>如果 left 的值为'left', 'center', 'right'，组件会根据相应的位置自动对齐。</para>
            /// </summary>
            public dynamic left
            {
                get { return _left; }
                set
                {
                    Type type = value.GetType();
                    if (type.IsEnum)
                    {
                        switch ((Enum.legend.left)value)
                        {
                            case Enum.legend.left.auto:
                                _left = Params.align.auto;
                                break;
                            case Enum.legend.left.left:
                                _left = Params.align.left;
                                break;
                            case Enum.legend.left.center:
                                _left = Params.align.center;
                                break;
                            case Enum.legend.left.right:
                                _left = Params.align.right;
                                break;
                            default:
                                _left = Params.align.auto;
                                break;
                        }
                    }
                    else
                        _left = value;

                }
            }

            #endregion

        }

        #endregion
    }

    #endregion
}
